/** @file cam.h 
 * Die Schnittstelle zur Kamera
 * 
 * @author Daniel Kummer, Sebastian Kummer
 * @date Donnerstag, Dezember 12, 2007
 * @version 1.0
 */

#ifndef LCVAPI_H_
#define LCVAPI_H_

#include "lcv-config.h"
#include "lcv-structs.h"
#include "cam-config.h"

/**
 * Holt ein Bild von der Kamera
 * @param filename Dateiname des Bildes (wird auf dem Zielsystem ignoriert)
 * @return Bild
 */
lcv_picture lcv_capture_frame(const char * filename);

/**
* Holt ein Bildausschnutt von der Kamera
* @param start_x Die erste X Koordinate der Region
* @param start_y Die erste Y Koordinate der Region
* @param width Breite der Region
* @param height Höhe der Region
* @param filename Dateiname (Wird auf dem Zielsystem ignoriert)
* @return Bild
*/
lcv_picture lcv_capture_region(const unsigned short start_x, const unsigned short start_y, const unsigned short width, unsigned short height, const char* filename);

/**
 * Schreibt eine Registerkonfiguration
 * @param setting Einstellung (Registeradresse)
 * @param value Wert
 * @return Erfolgsmeldung (positiv), bzw. Fehlernummer (negativ)
 */
char lcv_config_write(const unsigned int setting, const unsigned short value);

/**
 * Liest den Wert einer Registerkonfiguration
 * @return Registerwert
 */
unsigned short lcv_config_read(const unsigned int setting);

/**
 * Setzt alleRegister auf ihren Standardwert
 * @return Erfolgsmeldung (positiv), bzw. Fehlernummer (negativ)
 */
char lcv_regs_to_default();

/**
 * Setzt die 4 für die Bildregion verantwortlichen Register auf 
 * den Standardwert zurück 
 */
void lcv_reset_capture_frame();

/**
 * Aktiviert bzw. deaktiviert das Softwaremässige Puffering der Register.
 * Es empfiehlt sich das Buffering auf Targetsystemen mit mehr als einem
 * gleichzeitig laufenden Bildverarbeitungsprogramm zu deaktivieren.
 * Auf dem Hostsystem ist Buffering nicht implementiert.
 * Standardmässig ist der Buffer aktiviert.
 * @param enable Aktiviert bzw. deaktiviert Buffering  
 */ 
void lcv_reg_buffering(const unsigned char enable);

#endif /*LCVAPI_H_*/
